package com.coocaa.coolink_tvos_mobile_demo.utils;

import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class FileUtils {
    /**
     * 判断文件是否存在
     *
     * @param filePath 文件路径
     * @return 如果文件存在返回true，否则返回false
     */
    public static boolean isFileExists(String filePath) {
        return new File(filePath).exists();
    }

    /**
     * 创建文件夹
     *
     * @param dirPath 文件夹路径
     * @return 如果文件夹创建成功返回true，否则返回false
     */
    public static boolean createDir(String dirPath) {
        return new File(dirPath).mkdirs();
    }

    /**
     * 删除文件或空文件夹
     *
     * @param filePath 文件路径
     * @return 如果删除成功返回true，否则返回false
     */
    public static boolean deleteFile(String filePath) {
        File file = new File(filePath);
        if (!file.exists()) {
            return true;
        }
        if (file.isFile()) {
            return file.delete();
        } else if (file.isDirectory()) {
            String[] children = file.list();
            if (children == null) {
                return false;
            }
            for (String child : children) {
                if (!deleteFile(new File(file, child).getAbsolutePath())) {
                    return false;
                }
            }
            return file.delete();
        }
        return false;
    }

    /**
     * 获取应用程序的缓存目录路径
     *
     * @param context 上下文对象
     * @return 返回缓存目录路径
     */
    public static String getCacheDir(Context context) {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
                || !Environment.isExternalStorageRemovable()) {
            return context.getExternalCacheDir().getPath();
        } else {
            return context.getCacheDir().getPath();
        }
    }

    /**
     * 获取文件路径
     *
     * @param context 上下文对象
     * @param uri     文件Uri
     * @return 返回文件路径
     */
    public static String getPath(Context context, Uri uri) {
            String path = null;
            if (Build.VERSION.SDK_INT < 11) {
                path = RealPathUtil.getRealPathFromURI_BelowAPI11(context, uri);
            } else if (Build.VERSION.SDK_INT < 19) {
                path = RealPathUtil.getRealPathFromURI_API11to18(context, uri);
            } else {
                path = RealPathUtil.getRealPathFromURI_API19(context, uri);
            }
            if (TextUtils.isEmpty(path)) {
                if (Build.VERSION.SDK_INT >= 26){
                    path = RealPathUtil.getRealPathFromURI_API29(context, uri);
                }
            }
            return path;
    }

    /**
     * 拷贝文件到目标目录
     *
     * @param srcFilePath  源文件路径
     * @param destFilePath 目标文件路径
     * @throws IOException
     */
    public static void copyFile(String srcFilePath, String destFilePath) throws IOException {
        FileInputStream fis = new FileInputStream(srcFilePath);
        FileOutputStream fos = new FileOutputStream(destFilePath);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = fis.read(buffer)) > 0) {
            fos.write(buffer, 0, length);
        }
        fis.close();
        fos.close();
    }
}